package com.example.system.class02;

/**
 * @Date 2022/7/18
 * @Created by Jonathan
 */
public class Code04_Exist {

    public static void main(String[] args) {
        int[] sortedArr = new int[]{1, 3, 4, 6, 8};
        System.out.println(exist(sortedArr, 3));
    }

    /**
     * 判断一个有序数组sortedArr里是否存在num
     * note: 边界条件
     */
    private static boolean exist(int[] sortedArr, int num) {
        if (sortedArr == null || sortedArr.length == 0) {
            return false;
        }
        int L = 0;
        int R = sortedArr.length - 1;
        while (L < R) {
            // 这样用位运算
            int M = L + ((R - L) >> 1);
            if (sortedArr[M] == num) {
                return true;
            } else if (sortedArr[M] < num) {
                L = M + 1;
            } else {
                R = M - 1;
            }
        }
        // 跳出while循环的时候[L==R] 此时剩下最后一个数还没有比较
        // 扣边界条件
        return sortedArr[L] == num;
    }


    // todo
    // 在一个有序数组中 找第一个大于等于某个数的位置
    // 在一个有序数组中 找第一个小于等于某个数的位置
    // 局部最小值问题


}
